#ifndef _TAIIC_AVSR_H
#define _TAIIC_AVSR_H

#include "rknn_api.h"
#include "taiic_rknn.h"

#include<cmath>
#include<algorithm>

#define AVSR_V_BATCH 1
#define AVSR_V_HEIGHT 384
#define AVSR_V_WIDTH 32
#define AVSR_V_CHANNEL 4

//model path definition
#define AVSR_MODEL_PATH_300 "/oem/usr/model/avsr_300.rknn"
#define TAIIC_ASR_MODEL_PATH_505 "/oem/usr/model/asr_505.rknn"
#define ACOUSTICS_ASR_MODEL_PATH "/oem/usr/model/acoustics_asr_505.rknn"
typedef struct rkTOOLKIT_AVSR_S
{
    char *modelPath;
    rknn_context context; //模型上下文
    rknn_input_output_num io_num; //模型输入输出信息，结构体

    rknn_tensor_attr input_attrs[2];  //模型属性
    rknn_tensor_attr output_attrs[1]; //模型输出属性
    
    rknn_tensor_mem *input_mems[2]; //模型输入
    rknn_tensor_mem *output_mems[1]; //模型输出
}AVSR_TOOLKIT_MODEL_CTX_S;


int avsr_rknn_toolkit_config_init(AVSR_TOOLKIT_MODEL_CTX_S *ctx); //init model
int avsr_rknn_toolkit_io_init(AVSR_TOOLKIT_MODEL_CTX_S *ctx); //init input_output
int avsr_rknn_toolkit_data_refresh(AVSR_TOOLKIT_MODEL_CTX_S *ctx, unsigned char* input_data[2]); //updata input data
MODEL_RESULT_S avsr_rknn_toolkit_result_int8(AVSR_TOOLKIT_MODEL_CTX_S *ctx); //get top result

MODEL_RESULT_S avsr_rknn_toolkit_result_int8_opt(AVSR_TOOLKIT_MODEL_CTX_S *ctx);


#endif //_TAIIC_AVSR_H